import { ISysPerson } from '/@/views/fileattachment/api/interface';
import { ISysAttendanceShift } from '/@/views/hr/sysattendanceshift/api/interface';

export interface ISysAttendanceRecord {
	ID?: string | null;
	PersonId: null;
	Person?: ISysPerson;
	AttendanceShiftId: null;
	AttendanceShift?: ISysAttendanceShift;
	ShiftType: '排班' | '正常上班' | '请假' | '调休' | '替班' | '换班';
	ScheduleType: '自动排班' | '人工排班';
	Status: '正常' | '取消' | '暂停';
	Remark: string | null;
	SubstitutePersonId: null;
	SubstitutePerson?: ISysPerson;
	AttendanceResult: '未计算' | '正常' | '迟到' | '早退' | '迟到且早退' | '缺卡' | '旷工';
	LateMinutes: number | null;
	EarlyLeaveMinutes: number | null;
	WorkMinutes: number | null;
	MissingPunchCount: number | null;
	IsAbnormal: boolean;
}

export interface ISysAttendanceRecordVm {
	Entity: ISysAttendanceRecord;
	ActionName?: string | null;
	IsMyApprove?: boolean | null;

}

export interface ISysAttendanceRecordView extends ISysAttendanceRecord {

}

export interface ISysAttendanceRecordQuery {
	PersonId?: string | null;
	AttendanceShiftId?: string | null;
	ShiftType?: number | null;
	ScheduleType?: number | null;
	Status?: number | null;
	SubstitutePersonId?: string | null;
	AttendanceResult?: number | null;
	IsAbnormal?: boolean | null;
}

/**
 * 按人员查询排班记录的请求参数
 * 基于接口: POST /api/SysAttendanceRecord/SearchByPerson
 */
export interface ISearchByPersonRequest {
	/** 页码 */
	Page?: number;
	/** 每页条数 */
	Limit?: number;
	/** 是否为纯文本 */
	IsPlainText?: boolean;
	/** 是否返回字符串 */
	IsEmunToString?: boolean;
	/** 排序信息 */
	SortInfo?: {
		/** 排序属性 */
		Property?: string;
		/** 排序方向：Asc | Desc */
		Direction?: 'Asc' | 'Desc';
	};
	/** 人员ID */
	PersonId?: string;
	/** 部门ID */
	GroupId?: string;
	/** 排班日期 */
	ShiftDate?: string[] | Date;
	/** 姓名 */
	Name?: string;
	/** 组织ID */
	OrgId?: string;
	/** 工号 */
	StaffNo?: string;
}

/**
 * 批量修改排班请求参数
 * 基于接口: POST /Hr/SysAttendanceRecord/BatchChange
 */
export interface IBatchChangeRequest {
	/** 人员ID列表 */
	PersonIds: string[];
	/** 排班日期，格式: yyyy-MM-dd */
	DateRange?: string[];
	/** 考勤组ID */
	AttendanceShiftGroupId: string;
	/** 班次类型 */
	ShiftType?: '正常上班' | '请假' | '调休' | '替班' | '换班' | '加班' | '排班';
	/** 自动计算未来日期 */
	AutoCalculateFuture?: boolean;
	/** 替班人员ID */
	SubstitutePersonId?: string;
	/** 换班记录ID */
	SwapShiftId?: string;
	/** 换班人员ID */
	SwapPersonId?: string;
	/** 备注信息 */
	Remark?: string;
}
